package com.Offer;

import java.util.HashMap;
import java.util.LinkedList;
import java.util.Stack;

/*
    面试题31：栈的压入、弹出序列
    输入两个整数序列，第一个序列表示栈的压入顺序，请判断第二个序 列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。
    例如序列 1,2,3,4,5 是某栈的压入顺序
    序列 4，5,3,2,1 是该压栈序列对应的一个弹出序列，但 4,3,5,1,2 就不可能是该压栈序列的弹出序列。
    （注意：这两个序列的长度是相等的）
 */
public class demo31 {
    public static void main(String[] args) {
        int[] pushA = new int[]{1,2,3,4,5};
        int[] popA = new int[]{4,5,3,2,1};
        int[] popAA = new int[]{4,3,5,1,2};
        System.out.println(IsPopOrder(pushA,popA));
        System.out.println(IsPopOrder(pushA,popAA));
    }

    public static boolean IsPopOrder(int[] pushA,int[] popA){
        if(pushA == null || popA == null){
            return false;
        }
        Stack<Integer> stack = new Stack<>();
        int index = 0;
        for(int a : pushA){
            stack.push(a);
            while(!stack.isEmpty() && stack.peek() == popA[index]){
                stack.pop();
                index++;
            }
        }
        return stack.isEmpty();
    }

}
